"""
函数使用
"""


def add(num1, num2):
    """
    数字相加
    :param num1: 数字1
    :param num2: 数字2
    :return: 相加结果
    """
    return num1 + num2


print(add(1, 2))


# None类型
def say():
    print("hello wolrd!")


result = say()
print(f"返回值为{result},返回值类型为{type(result)}")


# 局部变量
def test():
    num = 100
    print(num)


test()  # 输出 100
# print(num) # 报错 name 'num' is not defined

# 全局变量
num = 100


def test_global():
    # 声明一个值为200的局部变量num
    num = 200
    print(num)


test_global()
print(num)


# 修改局部变量
def test_global2():
    global num
    num = 300
    print(num)


test_global2()
print(num)


# 多返回值
def test3():
    return "观止", True, 16


x, y, z = test3()
print(f"第一个值为{x},第二个值为{y},第三个值为{z}")


# 位置参数
def user(name, age, gender):
    print(f"名称：{name}，年龄：{age}，性别：{gender}")


user("张三", 18, "男")


# 关键字参数
def user2(name, age, gender, edu):
    print(f"名称：{name}，年龄：{age}，性别：{gender}，学历为：{edu}")


user2("李四", 18, edu="本科", gender=18)


# 默认参数
def user3(name, age, gender='男'):
    print(f"您的名字是{name},年龄是{age},性别是{gender}")


user3('TOM', 20)
# 输出 您的名字是TOM,年龄是20,性别是男
user3('TOM', 20, '女')


# 输出 您的名字是TOM,年龄是20,性别是女


# 可变参数 - 位置参数
def user4(*args):
    print(f"名称：{args[0]}，年龄：{args[1]}，性别：{args[2]}")


user("张三", 18, "女")


def user_info(**kwargs):
    print(kwargs)


user_info(name='TOM', age=20)
# 输出 {'name': 'TOM', 'age': 20}


# 匿名函数 lambda
def compute(add):
    result = add(6, 3)
    print(result)


# 输出 9
compute(lambda x, y: x + y)


# 等效于
def add(x, y):
    return x + y

def compute(add):
    result = add(6, 3)
    print(result)

# 输出 9
compute(add)
